\documentclass{ctexart}

\usepackage{graphicx}
\usepackage{float}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{tikz}
\usepackage{hyperref}
\usepackage{url}
\usepackage{subfigure}
\usetikzlibrary{arrows,shapes,chains}

\title{Julia集的分析和探索}

\author{周游3200106105 \\ 强基数学2001}

\date{2022/7/4}

\begin{document}

\maketitle

\begin{abstract}
    复动力系统是现代复分析的研究前沿，其对于混沌、预测、分形
    的研究都与Julia集和Mandelbrot集密切相关。
    Julia集具有很好的分形性质，它的局部是缩小的整体。
    我们可以通过程序，取不同的c,将不发散的$z_0$其绘制成图像，能得到很完美的图形。
\newline
\textbf{关键字:}Julia集、复动力系统、二次多项式迭代、分形

\end{abstract}

\section*{引言}
    Julia集是一个在复平面上形成分形的点的集合。
    以法国数学家加斯顿·朱利亚（Gaston Julia）的名字命名。
    c的微小变化能使图形发生较大偏差，例如，
    取c=0.285+0.529i为例，得到名为“兔子”的集合：
    \begin{figure}[h]
        \centering
    \subfigure
    {
        \begin{minipage}[b]{.4\linewidth}
            \includegraphics[scale=0.2]{./images/J02.png}
            \caption{兔子}
        \end{minipage}
    }
    \subfigure
    {
        \begin{minipage}[b]{.4\linewidth}
            \includegraphics[scale=0.2]{./images/J01.png}
            \caption{花}
        \end{minipage}
    }
    \end{figure}

\section{问题背景}
\subsection{多项式的迭代}
对于一次有理多项式的迭代：$f(z)=\frac{az+b}{cz+d},a,b,c,d\in \mathbb{C},ad-bc\neq 0$
的研究已较为完善。会产生一个不动点或两个不动点（吸引和排斥）。而二次多项式的迭代仍是前沿问题。
有3位数学家的菲尔兹奖工作和二次多项式的迭代有关:\par
法国数学家J.Yoccoz获1994年菲尔兹奖\par
美国数学家C.McMullen获1998年菲尔兹奖\par
巴西数学家A.Avila获2014年菲尔兹奖\\

\section{数学理论}

\subsection{Julia集}
Julia集可以由下式进行反复迭代得到：\cite{Mathigon}
$$f_c(z)=z^2+c$$
其中c是一个固定的复数参数。
从不同的$z_0$开始进行迭代：
\begin{equation*}
\begin{aligned}
z_1&=z_0^2+c\\
z^2&=z_1^2+c\\
&\cdots \\
z_{n+1}&=z_n^2+c,n=0,1,2...\\
\end{aligned}
\end{equation*}
对于固定的复数c，取某一z值（如z = z0），可以得到序列
$$z_0,f_c(z_0),f_c(f_c(z_0)),f_c(f_c(f_c(z_0))),\cdots$$
这一序列可能反散于无穷大或始终处于某一范围之内并收敛于某一值。
我们将使其不扩散的z值的集合称为Julia集。

\subsection{Mandelbrot集}
在对Julia集的研究中，我们可以自然地想到
取定$z_0=0$进行迭代： 
$f_c(z)=z^2+c$
每次迭代的值依序如以下数列所示：
$(0,f_c(0),f_c(f_c(0)),f_c(f_c(f_c(0))),...)$
不同的参数c可能使迭代值的模逐渐发散到无限大，也可能收敛在有限的区域内。
Mandelbrot集就是使其不扩散的所有复数c的集合。\par
二者关系密切，如图：

\begin{figure}[h]
    \centering
    \includegraphics[width=1\textwidth]{./images/J03.png}
    \caption{Mandelbrot集与Julia集}
\end{figure}


\section{算法}
\subsection{判断每一个z是否属于J}
用Window.h管理图像窗口的原点、显示长度、单位长度等参数\par
Iterate.h里放了迭代操作的类和二次多项式迭代子类、以及一步迭代的算法$z^2+c$\par
Julia.cpp为生成可执行文件的主程序,输入文件名、原点坐标、长度、参数c，
通过判断每一个z是否使迭代发散，绘制出Julia set图像.\par
Mandelbrot.cpp则绘制出Mandelbrot set图像.\par
使用bitmap.h和bitmap.cpp使build$\_$bmp函数得以实现。\par

判断z是否属于Julia集J的算法流程图：

\begin{figure}[H]
    \centering
\thispagestyle{empty}
% 流程图定义基本形状
\tikzstyle{startstop} = [rectangle, rounded corners, minimum width = 2cm, minimum height=1cm,text centered, draw = black]
\tikzstyle{io} = [trapezium, trapezium left angle=70, trapezium right angle=110, minimum width=2cm, minimum height=1cm, text centered, draw=black]
\tikzstyle{process} = [rectangle, minimum width=3cm, minimum height=1cm, text centered, draw=black]
\tikzstyle{decision} = [diamond, aspect = 3, text centered, draw=black]
% 箭头形式
\tikzstyle{arrow} = [->,>=stealth]
\begin{tikzpicture}[node distance=0.5cm]
%定义流程图具体形状
\node[startstop](start){开始};
\node[io, below of = start, yshift = -1cm](in1){输入参数c};
\node[process, below of = in1, yshift = -1cm](pro1){n=0};
\node[process, below of = pro1, yshift = -1cm](pro2){$f_c(z)=z^2+c$};
\node[decision, below of = pro2, yshift = -1cm](dec1){$n \geqslant 20$?};
\node[process, right of = pro2, xshift = 4cm](pro3){$n=n+1$};

\node[decision, below of = dec1 , yshift = -1cm](dec2){$|z|>2$?};
\node[io, below of = dec2, yshift = -1cm](out1){$z\notin J$};
\node[io, right of = out1, xshift = 4cm](out2){$z\in J$};
\node[startstop, below of = out1, yshift = -1cm](stop){结束};
%\coordinate (point1) at (3cm, 6cm);
%\coordinate (point2) at (-3cm, -6cm);

%连接具体形状
\draw [arrow] (start) -- (in1);
\draw [arrow] (in1) -- (pro1);
\draw [arrow] (pro1) -- (pro2);
\draw [arrow] (pro2) -- (dec1);
\draw (dec1) -| node [right] {否} (pro3);
\draw [arrow] (pro3) -- (pro2);
\draw (dec1) -- node [right] {是} (dec2);
\draw (dec2) -| node [right] {否} (out2);
\draw (dec2) -- node [right] {是} (out1);
\draw [arrow] (out1) -- (stop);
\draw [arrow] (out2) |- (stop);

\end{tikzpicture}
\caption{算法流程图}
\label{process}
\end{figure}

\section{数值算例及分析}
\subsection{输入参数}
先用make命令生成julia$\_$create可执行文件，运行julia$\_$create。
输入参数不足时，会得到提示：
\begin{verbatim}
	Usage: ./test filename ox oy dimension cx cy
\end{verbatim}
其中filename是文件名、ox,oy是原点坐标，dimention是图像显示长度，
cx,cy是参数c的实部和虚部。
\subsection{输出示例}
c=0.285-0.529i时，输出在下图中，与图1中（兔子）图案相同.
更换不同的c可以看到许多种图案,与参考图案相同：

\begin{figure*}[h]
    \centering
\subfigure
{
    \begin{minipage}[b]{.4\linewidth}
        \includegraphics[scale=0.07]{./images/rabbit.bmp}
        \caption{c=0.285-0.529i}
    \end{minipage}
}
\subfigure
{
    \begin{minipage}[b]{.4\linewidth}
        \includegraphics[scale=0.07]{./images/plane.bmp}
        \caption{c=-1.38182-0.00007i}
    \end{minipage}
}
\subfigure
{
    \begin{minipage}[b]{.4\linewidth}
        \includegraphics[scale=0.07]{./images/flower.bmp}
        \caption{c=0.178-0.529i}
    \end{minipage}
}
\subfigure
{
    \begin{minipage}[b]{.4\linewidth}
        \includegraphics[scale=0.07]{./images/beauty.bmp}
        \caption{c=-0.7546+0.086328i}
    \end{minipage}
}
\end{figure*}



\section{结论}
本次项目用C++程序顺利复刻了Julia集\cite{ROCHON2000A}的图像，代码在src目录下，
可以看到将参数c稍作改动时，生成的Julia集会有较大变化。能出现例如飞机、兔子、胖兔子之类的图像。


\bibliographystyle{unsrt}
\bibliography{bibliography}

\end{document}